home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / esc.jar / com / extensibility / xml / SOX2Reader.class (.txt) < prev    next >
Encoding:
Java Class File  |  2000-06-30  |  24.1 KB  |  1,107 lines

  1. package com.extensibility.xml;
  2.  
  3. import com.extensibility.xml.dt.DataType;
  4. import com.extensibility.xml.dt.DataTypeFactory;
  5. import com.extensibility.xml.dt.DataTypeIntf;
  6. import com.extensibility.xml.dt.Facet;
  7. import com.extensibility.xml.sax.BufferedHandlerBase;
  8. import java.io.FileNotFoundException;
  9. import java.io.IOException;
  10. import java.io.Reader;
  11. import java.io.StringReader;
  12. import java.net.UnknownHostException;
  13. import java.util.Hashtable;
  14. import java.util.Stack;
  15. import java.util.Vector;
  16. import org.xml.sax.AttributeList;
  17. import org.xml.sax.InputSource;
  18. import org.xml.sax.Locator;
  19. import org.xml.sax.Parser;
  20. import org.xml.sax.SAXException;
  21. import org.xml.sax.SAXParseException;
  22. import org.xml.sax.helpers.LocatorImpl;
  23.  
  24. public final class SOX2Reader extends BufferedHandlerBase {
  25.    static final String TOPLEVEL_ROOT = "schema";
  26.    static final String TOPLEVEL_INTRO = "intro";
  27.    static final String TOPLEVEL_DATATYPE = "datatype";
  28.    static final String TOPLEVEL_ELEMTYPE = "elementtype";
  29.    static final String TOPLEVEL_JOIN = "join";
  30.    static final String TOPLEVEL_COMMENT = "comment";
  31.    static final String TOPLEVEL_NAMESPACE = "namespace";
  32.    static final String TOPLEVEL_ATTRTYPE = "attdef";
  33.    static final String TAG_ELEMENT = "element";
  34.    static final String TAG_EXTENDS = "extends";
  35.    static final String TAG_APPEND = "append";
  36.    static final String TAG_EXPLAIN = "explain";
  37.    static final String TAG_CM = "model";
  38.    static final String TAG_CM_SEQ = "sequence";
  39.    static final String TAG_CM_CHOICE = "choice";
  40.    static final String TAG_CM_EMPTY = "empty";
  41.    static final String TAG_CM_PCDATA = "string";
  42.    static final String TAG_ATTR_OPTION = "option";
  43.    static final String TAG_ATTR_REQUIRED = "required";
  44.    static final String TAG_ATTR_FIXED = "fixed";
  45.    static final String TAG_ATTR_DEFAULT = "default";
  46.    static final String TAG_ATTR_IMPLIED = "implied";
  47.    static final String TAG_ENUMERATION = "enumeration";
  48.    static final String TAG_VARCHAR = "varchar";
  49.    static final String TAG_SCALAR = "scalar";
  50.    static String joinSubsetName = null;
  51.    private Hashtable dtElemNames;
  52.    private Hashtable elemDecls;
  53.    private Hashtable dtDecls;
  54.    private Hashtable currentAttrs;
  55.    private ElementDeclaration currentElemDecl;
  56.    private AttributeDeclaration currentAttrDecl;
  57.    private DataTypeDeclaration currentDataTypeDecl;
  58.    private ExternalSubset currentXS;
  59.    private NamespaceDeclaration currentNSDecl;
  60.    private Vector attrChoices;
  61.    private Vector elemDeclAttrs;
  62.    private Hashtable namespaces;
  63.    private SchemaIntf schema;
  64.    private ContentModel currentCM;
  65.    private boolean cmClosed;
  66.    private Stack cmConnectors;
  67.    private Stack contentModels;
  68.    private Object commentKind;
  69.    private StringBuffer commentContent;
  70.    private StringBuffer optionContent;
  71.    private boolean commentStart;
  72.    private Vector topComments;
  73.    private boolean optionStart;
  74.    private boolean defaultStart;
  75.    private String defaultContent;
  76.    private boolean fixedStart;
  77.    private String fixedContent;
  78.    private Hashtable optionExplains;
  79.    private String lastEnumExplain;
  80.    private boolean inEnumeration;
  81.    private boolean inProlog = true;
  82.    private Locator locator;
  83.    boolean isFirstGroup = false;
  84.    public URI logicalURI;
  85.  
  86.    public SOX2Reader(SchemaIntf var1) {
  87.       this.schema = var1;
  88.    }
  89.  
  90.    public void error(String var1, int var2, int var3, int var4) {
  91.       ParserException var5 = new ParserException(var2, var1);
  92.       var5.setSourceLinePos(var3);
  93.       if (this.schema.getShowErrors() && this.currentAttrDecl != null) {
  94.          this.currentAttrDecl.addError(var5);
  95.       } else if (this.schema.getShowErrors() && this.currentElemDecl != null) {
  96.          this.currentElemDecl.addError(var5);
  97.       } else if (this.schema.getShowErrors() && this.currentDataTypeDecl != null) {
  98.          this.currentDataTypeDecl.addError(var5);
  99.       } else {
  100.          var5.setSource(String.valueOf(String.valueOf(String.valueOf(String.valueOf("See Line: ").concat(String.valueOf(var3))).concat(String.valueOf(" at Column:"))).concat(String.valueOf(var4))).concat(String.valueOf(" in file.")));
  101.          this.schema.addError(var5);
  102.       }
  103.  
  104.    }
  105.  
  106.    public void error(SAXParseException var1) {
  107.       this.error(((SAXException)var1).getMessage(), 240, this.locator.getLineNumber(), this.locator.getColumnNumber());
  108.    }
  109.  
  110.    public void fatalError(SAXParseException var1) {
  111.       this.error(var1);
  112.    }
  113.  
  114.    public void setDocumentLocator(Locator var1) {
  115.       this.locator = var1;
  116.    }
  117.  
  118.    public InputSource resolveEntity(String var1, String var2) {
  119.       return !var2.startsWith("urn") && var2.indexOf("/urn:") == -1 ? null : new InputSource(new StringReader(""));
  120.    }
  121.  
  122.    public void parse(URI var1, URI var2) throws IOException {
  123.       this.logicalURI = var2;
  124.       Reader var4 = null;
  125.  
  126.       try {
  127.          Parser var3 = SchemaUtilities.getParser();
  128.          this.setDocumentLocator(new LocatorImpl());
  129.          var3.setEntityResolver(this);
  130.          var3.setErrorHandler(this);
  131.          var3.setDocumentHandler(this);
  132.          var4 = var1.createReader();
  133.          InputSource var5 = new InputSource(var4);
  134.          var5.setSystemId(var1.getFullName());
  135.          var3.parse(var5);
  136.       } catch (IOException var16) {
  137.          throw var16;
  138.       } catch (Exception var17) {
  139.          this.error(((Throwable)var17).getMessage(), 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  140.       } finally {
  141.          try {
  142.             if (var4 != null) {
  143.                var4.close();
  144.             }
  145.          } catch (IOException var15) {
  146.          }
  147.  
  148.       }
  149.  
  150.    }
  151.  
  152.    public void startDocument() {
  153.       this.dtElemNames = new Hashtable();
  154.       this.elemDecls = new Hashtable();
  155.       this.dtDecls = new Hashtable();
  156.       this.currentAttrs = new Hashtable();
  157.       this.currentXS = null;
  158.       this.currentNSDecl = null;
  159.       this.currentElemDecl = null;
  160.       this.currentAttrDecl = null;
  161.       this.currentDataTypeDecl = null;
  162.       this.attrChoices = new Vector();
  163.       this.optionExplains = new Hashtable();
  164.       this.inEnumeration = false;
  165.       this.lastEnumExplain = null;
  166.       this.elemDeclAttrs = new Vector();
  167.       this.namespaces = new Hashtable();
  168.       this.cmClosed = true;
  169.       this.cmConnectors = new Stack();
  170.       this.contentModels = new Stack();
  171.       this.commentKind = null;
  172.       this.commentContent = new StringBuffer();
  173.       this.optionContent = new StringBuffer();
  174.       this.commentStart = false;
  175.       this.topComments = new Vector();
  176.       this.optionStart = false;
  177.       this.fixedStart = false;
  178.       this.defaultStart = false;
  179.       this.fixedContent = null;
  180.       this.defaultContent = null;
  181.    }
  182.  
  183.    public void endDocument() {
  184.    }
  185.  
  186.    public void startElement(String var1, AttributeList var2) {
  187.       this.inProlog = false;
  188.       if (((BufferedHandlerBase)this).isSavingXML()) {
  189.          super.startElement(var1, var2);
  190.       } else {
  191.          this.parseElement(var1, var2);
  192.       }
  193.    }
  194.  
  195.    public void processingInstruction(String var1, String var2) throws SAXException {
  196.       ProcessingInstruction var3 = new ProcessingInstruction(var1, var2);
  197.       ((BaseDeclaration)var3).setURI(this.logicalURI);
  198.       if (this.inProlog) {
  199.          ((BaseDeclaration)var3).setIsInProlog(true);
  200.       }
  201.  
  202.       this.schema.insertDeclaration(var3, (BaseDeclaration)null);
  203.    }
  204.  
  205.    private void doSchema(AttributeList var1) {
  206.       String var2 = null;
  207.       String var3 = null;
  208.       String var4 = null;
  209.  
  210.       for(int var5 = 0; var5 < var1.getLength(); ++var5) {
  211.          String var6 = var1.getName(var5);
  212.          if (var6.equals("uri")) {
  213.             var2 = var1.getValue(var5);
  214.          } else if (var6.equals("prefix")) {
  215.             var3 = var1.getValue(var5);
  216.          } else if (var6.equals("soxlang-version")) {
  217.             var4 = var1.getValue(var5);
  218.          } else {
  219.             this.error(String.valueOf("Unrecognized attribute for 'schema' : ").concat(String.valueOf(var6)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  220.          }
  221.       }
  222.  
  223.       if (var2 != null) {
  224.          this.schema.setNamespace(new URI((URI)null, var2));
  225.       }
  226.  
  227.       if (var3 != null) {
  228.          this.schema.setSchemaPrefix(var3);
  229.       }
  230.  
  231.       if (var4 != null && !var4.equals("V0.2.2")) {
  232.          this.error(var4, 243, this.locator.getLineNumber(), this.locator.getColumnNumber());
  233.       }
  234.  
  235.    }
  236.  
  237.    private void doIntro(AttributeList var1) {
  238.       ((BufferedHandlerBase)this).setSaveXML(true);
  239.       ((BufferedHandlerBase)this).clearSavedXML();
  240.    }
  241.  
  242.    private void doNamespace(AttributeList var1) {
  243.       String var2 = null;
  244.       String var3 = null;
  245.  
  246.       for(int var4 = 0; var4 < var1.getLength(); ++var4) {
  247.          String var5 = var1.getName(var4);
  248.          if (var5.equals("prefix")) {
  249.             var2 = var1.getValue(var4);
  250.          } else if (var5.equals("namespace")) {
  251.             var3 = var1.getValue(var4);
  252.          } else {
  253.             this.error(String.valueOf("Unrecognized attribute for 'namespace' : ").concat(String.valueOf(var5)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  254.          }
  255.       }
  256.  
  257.       if (var2 == null) {
  258.          this.error("namespace prefix attribute is required.", 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  259.       } else if (var3 == null) {
  260.          this.error("namespace location attribute is required.", 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  261.       } else {
  262.          if (this.namespaces.contains(var2)) {
  263.             this.error(String.valueOf("Namespace already defined: ").concat(String.valueOf(var2)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  264.          }
  265.  
  266.          NamespaceDeclaration var6 = new NamespaceDeclaration(var2, var3);
  267.          this.addComments(var6);
  268.          this.currentNSDecl = var6;
  269.          this.schema.insertDeclaration(var6, (BaseDeclaration)null);
  270.          this.namespaces.put(var3, var2);
  271.       }
  272.    }
  273.  
  274.    private void doJoin(AttributeList var1) {
  275.       String var2 = null;
  276.       String var3 = null;
  277.       String var4 = null;
  278.  
  279.       for(int var5 = 0; var5 < var1.getLength(); ++var5) {
  280.          String var6 = var1.getName(var5);
  281.          if (var6.equals("system")) {
  282.             var2 = var1.getValue(var5);
  283.          } else if (var6.equals("public")) {
  284.             var3 = var1.getValue(var5);
  285.          } else if (var6.equals("datatype")) {
  286.             var4 = var1.getValue(var5);
  287.          } else {
  288.             this.error(String.valueOf("Unrecognized attribute for 'join' : ").concat(String.valueOf(var6)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  289.          }
  290.       }
  291.  
  292.       if (var2 == null) {
  293.          this.error("The 'system' attribute is required for 'join'.", 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  294.       } else {
  295.          if (var4 != null && !var4.equals("schema")) {
  296.             this.error("The 'datatype' attribute of 'join' is required to be 'schema'.", 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  297.          }
  298.  
  299.          new URI((URI)null, var2);
  300.          URI var21 = new URI(this.logicalURI, var2);
  301.          String var7 = DTDUtilities.makeValidName(var21.getShortName());
  302.          ExternalPEDeclaration var8 = new ExternalPEDeclaration(var7, var3, var21);
  303.          ((BaseDeclaration)var8).setURI(this.logicalURI);
  304.          this.schema.insertDeclaration(var8, (BaseDeclaration)null);
  305.  
  306.          try {
  307.             joinSubsetName = var7;
  308.             int var9 = this.schema.insertSubset(var8);
  309.             joinSubsetName = null;
  310.             if (var9 > 0) {
  311.                this.error(((BaseDeclaration)var8).getName(), 246, this.locator.getLineNumber(), this.locator.getColumnNumber());
  312.             }
  313.  
  314.             ExternalSubset var10 = (ExternalSubset)this.schema.getNamedDeclaration(var7, Class.forName("com.extensibility.xml.ExternalSubset"));
  315.             if (var10 != null) {
  316.                this.addComments(var10);
  317.                this.currentXS = var10;
  318.             }
  319.          } catch (UnknownHostException var17) {
  320.             this.error(var21.getFullName(), 245, this.locator.getLineNumber(), this.locator.getColumnNumber());
  321.          } catch (FileNotFoundException var18) {
  322.             this.error(var21.getShortName(), 244, this.locator.getLineNumber(), this.locator.getColumnNumber());
  323.          } catch (IOException var19) {
  324.             this.error(((Throwable)var19).getMessage(), 247, this.locator.getLineNumber(), this.locator.getColumnNumber());
  325.          } finally {
  326.             joinSubsetName = null;
  327.          }
  328.  
  329.       }
  330.    }
  331.  
  332.    private void doElementType(AttributeList var1) {
  333.       String var2 = null;
  334.       boolean var3 = false;
  335.  
  336.       for(int var4 = 0; var4 < var1.getLength(); ++var4) {
  337.          String var5 = var1.getName(var4);
  338.          if (var5.equals("name")) {
  339.             var2 = var1.getValue(var4);
  340.          } else {
  341.             this.error(String.valueOf("Unrecognized attribute for 'elementtype' : ").concat(String.valueOf(var5)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  342.          }
  343.       }
  344.  
  345.       if (var2 == null) {
  346.          var3 = true;
  347.          var2 = "undefinedName";
  348.       }
  349.  
  350.       if (this.elemDecls.containsKey(var2)) {
  351.          this.currentElemDecl = (ElementDeclaration)this.elemDecls.get(var2);
  352.       } else {
  353.          this.currentElemDecl = new ElementDeclaration(var2, 3);
  354.          this.currentElemDecl.setURI(this.logicalURI);
  355.          this.elemDecls.put(var2, this.currentElemDecl);
  356.       }
  357.  
  358.       this.addComments(this.currentElemDecl);
  359.       if (this.dtElemNames.containsKey(var2)) {
  360.          this.error(String.valueOf("elementtype name used more than once: ").concat(String.valueOf(var2)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  361.       } else {
  362.          this.dtElemNames.put(var2, this.currentElemDecl);
  363.       }
  364.  
  365.       for(int var8 = 0; var8 < var1.getLength(); ++var8) {
  366.          String var6 = var1.getName(var8);
  367.          if (var6.indexOf(":") != -1) {
  368.             String var7 = var1.getValue(var8);
  369.             this.currentElemDecl.putMetaProp(var6, var7);
  370.          }
  371.       }
  372.  
  373.       if (var3) {
  374.          this.error("A 'name' attribute is required for elementtype -- setting to 'undefinedName'.", 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  375.       }
  376.  
  377.    }
  378.  
  379.    private void doDataType(AttributeList var1) {
  380.       String var2 = null;
  381.       boolean var3 = false;
  382.  
  383.       for(int var4 = 0; var4 < var1.getLength(); ++var4) {
  384.          String var5 = var1.getName(var4);
  385.          if (var5.equals("name")) {
  386.             var2 = var1.getValue(var4);
  387.          } else {
  388.             this.error(String.valueOf("Unrecognized attribute for 'datatype' : ").concat(String.valueOf(var5)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  389.          }
  390.       }
  391.  
  392.       if (var2 == null) {
  393.          var3 = true;
  394.          var2 = "undefinedName";
  395.       }
  396.  
  397.       this.currentDataTypeDecl = new DataTypeDeclaration(var2);
  398.       if (var3) {
  399.          this.error("A 'name' attribute is required for 'datatype' -- setting to 'undefinedName'.", 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  400.       }
  401.  
  402.       this.addComments(this.currentDataTypeDecl);
  403.       this.currentDataTypeDecl.setURI(this.logicalURI);
  404.       if (this.dtElemNames.containsKey(var2)) {
  405.          this.error(String.valueOf("datatype name used more than once: ").concat(String.valueOf(var2)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  406.       } else {
  407.          this.dtElemNames.put(var2, this.currentDataTypeDecl);
  408.       }
  409.  
  410.    }
  411.  
  412.    private void doAttrType(AttributeList var1) {
  413.       boolean var2 = false;
  414.       String var3 = null;
  415.       String var4 = null;
  416.       String var5 = new String("string");
  417.  
  418.       for(int var6 = 0; var6 < var1.getLength(); ++var6) {
  419.          String var7 = var1.getName(var6);
  420.          if (var7.equals("prefix")) {
  421.             var4 = var1.getValue(var6);
  422.          } else if (var7.equals("datatype")) {
  423.             var5 = var1.getValue(var6);
  424.          } else if (var7.equals("name")) {
  425.             var3 = var1.getValue(var6);
  426.          } else {
  427.             this.error(var7, 252, this.locator.getLineNumber(), this.locator.getColumnNumber());
  428.          }
  429.       }
  430.  
  431.       if (var3 == null) {
  432.          var2 = true;
  433.          var3 = "undefinedName";
  434.       }
  435.  
  436.       if (var4 != null) {
  437.          if (!this.namespaces.contains(var4)) {
  438.             this.error(var4, 238, this.locator.getLineNumber(), this.locator.getColumnNumber());
  439.          }
  440.  
  441.          var3 = String.valueOf(String.valueOf(var4).concat(String.valueOf(":"))).concat(String.valueOf(var3));
  442.       } else {
  443.          var3 = var3;
  444.       }
  445.  
  446.       DataType var13 = this.convertDataType(var5);
  447.       boolean var8 = false;
  448.       this.currentAttrDecl = new AttributeDeclaration(this.currentElemDecl, var3, var13, (Vector)null, false, (String)null);
  449.       if (var2) {
  450.          this.error("A 'name' attribute is required for 'attdef' -- setting to 'undefinedName'.", 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  451.       }
  452.  
  453.       this.currentAttrDecl.setURI(this.currentElemDecl.getURI());
  454.       this.currentAttrs.put(var3, this.currentAttrDecl);
  455.       if (this.currentElemDecl != null) {
  456.          this.elemDeclAttrs.addElement(this.currentAttrDecl);
  457.       }
  458.  
  459.       for(int var9 = 0; var9 < var1.getLength(); ++var9) {
  460.          String var10 = var1.getName(var9);
  461.          if (var10.indexOf(":") != -1) {
  462.             String var11 = var1.getValue(var9);
  463.             this.currentAttrDecl.putMetaProp(var10, var11);
  464.          }
  465.       }
  466.  
  467.    }
  468.  
  469.    public void doEnumeration(AttributeList var1) {
  470.       String var2 = null;
  471.       String var3 = null;
  472.       this.inEnumeration = true;
  473.       this.lastEnumExplain = null;
  474.  
  475.       for(int var4 = 0; var4 < var1.getLength(); ++var4) {
  476.          String var5 = var1.getName(var4);
  477.          if (var5.equals("prefix")) {
  478.             var2 = var1.getValue(var4);
  479.          } else if (var5.equals("datatype")) {
  480.             var3 = var1.getValue(var4);
  481.          } else {
  482.             this.error(String.valueOf("Unrecognzed attribute of enumeration: ").concat(String.valueOf(var5)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  483.          }
  484.       }
  485.  
  486.       if (var3 == null) {
  487.          this.error("The 'datatype' attribute is required for enumeration -- defaulting to 'string'.", 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  488.          var3 = "string";
  489.       }
  490.  
  491.       if (var2 != null) {
  492.          if (!this.namespaces.contains(var2)) {
  493.             this.error(var2, 238, this.locator.getLineNumber(), this.locator.getColumnNumber());
  494.          }
  495.  
  496.          var3 = String.valueOf(String.valueOf(var2).concat(String.valueOf(":"))).concat(String.valueOf(var3));
  497.       }
  498.  
  499.       DataType var6 = this.convertDataType(var3);
  500.       if (this.currentAttrDecl != null) {
  501.          this.currentAttrDecl.setDataType(var6);
  502.       } else if (this.currentDataTypeDecl != null) {
  503.          this.currentDataTypeDecl.setDataType(var6);
  504.       } else {
  505.          this.error("Enumeration should only be used within attdef and datatype elements.", 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  506.       }
  507.  
  508.    }
  509.  
  510.    private void doPCData(AttributeList var1) {
  511.       if (this.getCurrentConnection() == ',') {
  512.          String var2 = null;
  513.          String var3 = null;
  514.  
  515.          for(int var4 = 0; var4 < var1.getLength(); ++var4) {
  516.             String var5 = var1.getName(var4);
  517.             if (var5.equals("prefix")) {
  518.                var2 = var1.getValue(var4);
  519.             } else if (var5.equals("datatype")) {
  520.                var3 = var1.getValue(var4);
  521.             } else {
  522.                this.error(String.valueOf("Unrecognzed attribute of 'string': ").concat(String.valueOf(var5)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  523.             }
  524.          }
  525.  
  526.          if (var2 != null && !this.namespaces.contains(var2)) {
  527.             this.error(var2, 238, this.locator.getLineNumber(), this.locator.getColumnNumber());
  528.          }
  529.  
  530.          this.currentElemDecl.setContentModel(5);
  531.          if (var3 != null) {
  532.             if (var2 != null) {
  533.                var3 = String.valueOf(String.valueOf(var2).concat(String.valueOf(":"))).concat(String.valueOf(var3));
  534.             }
  535.  
  536.             DataType var6 = this.convertDataType(var3);
  537.             this.currentElemDecl.setDataType(var6);
  538.          }
  539.  
  540.          this.cmClosed = true;
  541.       }
  542.  
  543.    }
  544.  
  545.    void setOccurance(String var1, ContentModelTerm var2) {
  546.       if (var1 == null) {
  547.          var2.setOccurance('\u0000');
  548.       } else if (var1.length() == 1) {
  549.          if (var1.charAt(0) != 0 && var1.charAt(0) != '+' && var1.charAt(0) != '?' && var1.charAt(0) != '*') {
  550.             this.error(String.valueOf("Invalid occurs character : '").concat(String.valueOf(var1)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  551.          } else {
  552.             var2.setOccurance(var1.charAt(0));
  553.          }
  554.       } else {
  555.          int[] var3 = new int[]{1, 1};
  556.          DTDUtilities.parseSourceOccurance(var1, 0, var3);
  557.          var2.setOccurance(var3[0], var3[1]);
  558.       }
  559.  
  560.    }
  561.  
  562.    private void doModel() {
  563.       this.isFirstGroup = true;
  564.       this.currentElemDecl.setContentModel(6);
  565.       this.currentCM = this.currentElemDecl.getContentModel();
  566.       this.cmClosed = false;
  567.       this.cmConnectors.push(new Character(','));
  568.       this.contentModels.push(this.currentCM.getRootGroup());
  569.    }
  570.  
  571.    private void doSequenceChoice(String var1, AttributeList var2) {
  572.       int var3 = var1.equals("sequence") ? 44 : 124;
  573.       String var4 = null;
  574.       String var5 = null;
  575.       ContentModelTerm var6 = new ContentModelTerm();
  576.  
  577.       for(int var7 = 0; var7 < var2.getLength(); ++var7) {
  578.          String var8 = var2.getName(var7);
  579.          if (var8.equals("name")) {
  580.             var4 = var2.getValue(var7);
  581.          } else if (var8.equals("occurs")) {
  582.             var5 = var2.getValue(var7);
  583.          } else {
  584.             this.error(String.valueOf(String.valueOf(String.valueOf("Unrecognzed attribute of '").concat(String.valueOf(var1))).concat(String.valueOf("': "))).concat(String.valueOf(var8)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  585.          }
  586.       }
  587.  
  588.       if (var4 != null) {
  589.          var6.setLocalTag(var4);
  590.       }
  591.  
  592.       this.setOccurance(var5, var6);
  593.       var6.setConnection(this.getCurrentConnection());
  594.       if (this.isFirstGroup) {
  595.          this.getCurrentParent().setLocalTag(var4);
  596.          this.getCurrentParent().setOccurance(var6.getMinOccurance(), var6.getMaxOccurance());
  597.          this.getCurrentParent().setConnection(var6.getConnection());
  598.          this.cmConnectors.pop();
  599.          this.cmConnectors.push(new Character((char)var3));
  600.       } else {
  601.          this.getCurrentParent().addTerm(var6);
  602.          this.contentModels.push(var6);
  603.          this.cmConnectors.push(new Character((char)var3));
  604.       }
  605.  
  606.       this.isFirstGroup = false;
  607.    }
  608.  
  609.    private char getCurrentConnection() {
  610.       return (Character)this.cmConnectors.peek();
  611.    }
  612.  
  613.    private ContentModelTerm getCurrentParent() {
  614.       return (ContentModelTerm)this.contentModels.peek();
  615.    }
  616.  
  617.    private void doElement(AttributeList var1) {
  618.       String var2 = null;
  619.       String var3 = null;
  620.       String var4 = null;
  621.       String var5 = null;
  622.  
  623.       for(int var6 = 0; var6 < var1.getLength(); ++var6) {
  624.          String var7 = var1.getName(var6);
  625.          if (var7.equals("prefix")) {
  626.             var2 = var1.getValue(var6);
  627.          } else if (var7.equals("type")) {
  628.             var3 = var1.getValue(var6);
  629.          } else if (var7.equals("name")) {
  630.             var4 = var1.getValue(var6);
  631.          } else if (var7.equals("occurs")) {
  632.             var5 = var1.getValue(var6);
  633.          } else {
  634.             this.error(String.valueOf("Unrecognzed attribute of 'element': ").concat(String.valueOf(var7)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  635.          }
  636.       }
  637.  
  638.       if (var3 == null) {
  639.          this.error("The 'type' attribute is required for 'element' -- setting to 'undefinedType'.", 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  640.          var3 = "undefinedType";
  641.       }
  642.  
  643.       if (var2 != null) {
  644.          if (!this.namespaces.contains(var2)) {
  645.             this.error(String.valueOf(String.valueOf(var3).concat(String.valueOf(", "))).concat(String.valueOf(var2)), 242, this.locator.getLineNumber(), this.locator.getColumnNumber());
  646.          }
  647.       } else if (this.elemDecls.containsKey(var3)) {
  648.          ElementDeclaration var12 = (ElementDeclaration)this.elemDecls.get(var3);
  649.       } else {
  650.          ElementDeclaration var13 = new ElementDeclaration(var3, 3);
  651.          ((BaseDeclaration)var13).setURI(this.logicalURI);
  652.          this.elemDecls.put(var3, var13);
  653.       }
  654.  
  655.       char var8 = this.getCurrentConnection();
  656.       ContentModelTerm var9 = this.getCurrentParent();
  657.       String var10;
  658.       if (var2 != null && var2.length() != 0) {
  659.          var10 = String.valueOf(String.valueOf(var2).concat(String.valueOf(":"))).concat(String.valueOf(var3));
  660.       } else {
  661.          var10 = var3;
  662.       }
  663.  
  664.       ContentModelTerm var11 = new ContentModelTerm(new TypeRef(var10), '\u0000', var8);
  665.       this.setOccurance(var5, var11);
  666.       if (var4 != null) {
  667.          var11.setLocalTag(var4);
  668.       }
  669.  
  670.       var9.addTerm(var11);
  671.    }
  672.  
  673.    public void doScalar(AttributeList var1) {
  674.       if (this.currentDataTypeDecl == null && this.currentAttrDecl == null) {
  675.          this.error("scalar should only be used within attdef and datatype elements.", 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  676.       } else {
  677.          String var2 = null;
  678.          String var3 = new String("number");
  679.          String var4 = null;
  680.          String var5 = null;
  681.          String var6 = null;
  682.          String var7 = null;
  683.          String var8 = new String("false");
  684.          String var9 = new String("false");
  685.  
  686.          for(int var10 = 0; var10 < var1.getLength(); ++var10) {
  687.             String var11 = var1.getName(var10);
  688.             if (var11.equals("prefix")) {
  689.                var2 = var1.getValue(var10);
  690.             } else if (var11.equals("datatype")) {
  691.                var3 = var1.getValue(var10);
  692.             } else if (var11.equals("digits")) {
  693.                var4 = var1.getValue(var10);
  694.             } else if (var11.equals("decimals")) {
  695.                var5 = var1.getValue(var10);
  696.             } else if (var11.equals("minvalue")) {
  697.                var6 = var1.getValue(var10);
  698.             } else if (var11.equals("maxvalue")) {
  699.                var7 = var1.getValue(var10);
  700.             } else if (var11.equals("minexclusive")) {
  701.                var8 = var1.getValue(var10);
  702.             } else if (var11.equals("maxexclusive")) {
  703.                var9 = var1.getValue(var10);
  704.             } else {
  705.                this.error(String.valueOf("Unrecognized attribute in scalar element: ").concat(String.valueOf(var11)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  706.             }
  707.          }
  708.  
  709.          if (var2 != null) {
  710.             if (!this.namespaces.contains(var2)) {
  711.                this.error(String.valueOf(String.valueOf(var3).concat(String.valueOf(", "))).concat(String.valueOf(var2)), 242, this.locator.getLineNumber(), this.locator.getColumnNumber());
  712.             }
  713.  
  714.             var3 = String.valueOf(String.valueOf(var2).concat(String.valueOf(":"))).concat(String.valueOf(var3));
  715.          }
  716.  
  717.          DataType var13 = this.convertDataType(var3);
  718.          if (var4 != null || var5 != null) {
  719.             Object var12 = null;
  720.             if (var4 != null) {
  721.                Facet var14 = new Facet(Facet.FACET_DIGITS_NAME, var4);
  722.                var13 = (DataType)var13.applyFacet(var14);
  723.             }
  724.  
  725.             if (var5 != null) {
  726.                Facet var15 = new Facet(Facet.FACET_DECIMALS_NAME, var5);
  727.                var13 = (DataType)var13.applyFacet(var15);
  728.             }
  729.          }
  730.  
  731.          Object var16 = null;
  732.          if (var6 != null) {
  733.             Facet var17 = new Facet(Facet.FACET_MIN_NAME, var6);
  734.             var13 = (DataType)var13.applyFacet(var17);
  735.          }
  736.  
  737.          if (var8 != null) {
  738.             Facet var18 = new Facet(Facet.FACET_MINEX_NAME, var8);
  739.             var13 = (DataType)var13.applyFacet(var18);
  740.          }
  741.  
  742.          if (var7 != null) {
  743.             Facet var19 = new Facet(Facet.FACET_MAX_NAME, var7);
  744.             var13 = (DataType)var13.applyFacet(var19);
  745.          }
  746.  
  747.          if (var9 != null) {
  748.             Facet var20 = new Facet(Facet.FACET_MAXEX_NAME, var9);
  749.             var13 = (DataType)var13.applyFacet(var20);
  750.          }
  751.  
  752.          if (this.currentDataTypeDecl != null) {
  753.             this.currentDataTypeDecl.setDataType(var13);
  754.          } else if (this.currentAttrDecl != null) {
  755.             this.currentAttrDecl.setDataType(var13);
  756.          }
  757.  
  758.       }
  759.    }
  760.  
  761.    public void doVarChar(AttributeList var1) {
  762.       if (this.currentDataTypeDecl == null && this.currentAttrDecl == null) {
  763.          this.error("varchar should only be used within attdef and datatype elements.", 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  764.       } else {
  765.          String var2 = null;
  766.          String var3 = new String("string");
  767.          String var4 = null;
  768.  
  769.          for(int var5 = 0; var5 < var1.getLength(); ++var5) {
  770.             String var6 = var1.getName(var5);
  771.             if (var6.equals("prefix")) {
  772.                var2 = var1.getValue(var5);
  773.             } else if (var6.equals("datatype")) {
  774.                var3 = var1.getValue(var5);
  775.             } else if (var6.equals("maxlength")) {
  776.                var4 = var1.getValue(var5);
  777.             } else {
  778.                this.error(String.valueOf("Unrecognzed attribute of varchar: ").concat(String.valueOf(var6)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  779.             }
  780.          }
  781.  
  782.          if (var2 != null) {
  783.             if (!this.namespaces.contains(var2)) {
  784.                this.error(String.valueOf(String.valueOf(var3).concat(String.valueOf(", "))).concat(String.valueOf(var2)), 242, this.locator.getLineNumber(), this.locator.getColumnNumber());
  785.             }
  786.  
  787.             var3 = String.valueOf(String.valueOf(var2).concat(String.valueOf(":"))).concat(String.valueOf(var3));
  788.          }
  789.  
  790.          DataType var8 = this.convertDataType(var3);
  791.          Facet var7 = new Facet(Facet.FACET_MAXLENGTH_NAME, var4);
  792.          var8 = (DataType)var8.applyFacet(var7);
  793.          if (this.currentDataTypeDecl != null) {
  794.             this.currentDataTypeDecl.setDataType(var8);
  795.          } else if (this.currentAttrDecl != null) {
  796.             this.currentAttrDecl.setDataType(var8);
  797.          }
  798.  
  799.       }
  800.    }
  801.  
  802.    public void doExtends(AttributeList var1) {
  803.       String var2 = null;
  804.       String var3 = null;
  805.  
  806.       for(int var4 = 0; var4 < var1.getLength(); ++var4) {
  807.          String var5 = var1.getName(var4);
  808.          if (var5.equals("type")) {
  809.             var2 = var1.getValue(var4);
  810.          } else if (var5.equals("prefix")) {
  811.             var3 = var1.getValue(var4);
  812.          } else {
  813.             this.error(String.valueOf("Unrecognzed attribute of 'element': ").concat(String.valueOf(var5)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  814.          }
  815.       }
  816.  
  817.       if (var2 == null) {
  818.          this.error("The 'type' attribute is required for 'extends' -- setting to 'undefinedType'.", 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  819.          var2 = "undefinedType";
  820.       }
  821.  
  822.       if (this.currentElemDecl == null) {
  823.          this.error("No enclosing element declaration for extends", 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  824.       } else {
  825.          if (var3 != null) {
  826.             var2 = String.valueOf(String.valueOf(var3).concat(String.valueOf(':'))).concat(String.valueOf(var2));
  827.          }
  828.  
  829.          this.currentElemDecl.setSuperType(new DeclRef(var2, Class.forName("com.extensibility.xml.ElementDeclaration")));
  830.       }
  831.  
  832.    }
  833.  
  834.    public void doAppend(AttributeList var1) {
  835.       this.currentElemDecl.setContentModel(6);
  836.       this.currentCM = this.currentElemDecl.getContentModel();
  837.       this.currentCM.updateModelTerm();
  838.       this.cmClosed = false;
  839.       this.cmConnectors.push(new Character(','));
  840.       this.contentModels.push(this.currentCM);
  841.    }
  842.  
  843.    private void addComments(BaseDeclaration var1) {
  844.       for(int var2 = 0; var2 < this.topComments.size(); ++var2) {
  845.          var1.addComment((Comment)this.topComments.elementAt(var2));
  846.       }
  847.  
  848.       this.topComments.setSize(0);
  849.    }
  850.  
  851.    public void parseElement(String var1, AttributeList var2) {
  852.       if (var1.equals("schema")) {
  853.          this.doSchema(var2);
  854.       } else if (var1.equals("intro")) {
  855.          this.doIntro(var2);
  856.       } else if (var1.equals("namespace")) {
  857.          this.doNamespace(var2);
  858.       } else if (var1.equals("join")) {
  859.          this.doJoin(var2);
  860.       } else if (var1.equals("elementtype")) {
  861.          this.doElementType(var2);
  862.       } else if (var1.equals("attdef")) {
  863.          this.doAttrType(var2);
  864.       } else if (var1.equals("datatype")) {
  865.          this.doDataType(var2);
  866.       } else if (var1.equals("enumeration")) {
  867.          this.doEnumeration(var2);
  868.       } else if (var1.equals("option")) {
  869.          this.optionStart = true;
  870.       } else if (var1.equals("required")) {
  871.          this.currentAttrDecl.setRequired(true);
  872.       } else if (var1.equals("default")) {
  873.          this.defaultContent = null;
  874.          this.defaultStart = true;
  875.       } else if (var1.equals("fixed")) {
  876.          this.currentAttrDecl.setRequired(true);
  877.          this.fixedContent = null;
  878.          this.fixedStart = true;
  879.       } else if (var1.equals("implied")) {
  880.          this.currentAttrDecl.setRequired(false);
  881.          this.fixedContent = null;
  882.          this.defaultContent = null;
  883.          this.defaultStart = false;
  884.          this.fixedStart = false;
  885.       } else if (var1.equals("model")) {
  886.          this.doModel();
  887.       } else if (var1.equals("empty")) {
  888.          this.currentElemDecl.setContentModel(3);
  889.          this.cmClosed = true;
  890.       } else if (var1.equals("string")) {
  891.          this.doPCData(var2);
  892.       } else if (!var1.equals("sequence") && !var1.equals("choice")) {
  893.          if (var1.equals("element")) {
  894.             this.doElement(var2);
  895.          } else if (var1.equals("explain")) {
  896.             ((BufferedHandlerBase)this).setSaveXML(true);
  897.             ((BufferedHandlerBase)this).clearSavedXML();
  898.          } else if (var1.equals("comment")) {
  899.             this.commentStart = true;
  900.             this.commentKind = null;
  901.          } else if (var1.equals("extends")) {
  902.             this.doExtends(var2);
  903.          } else if (var1.equals("append")) {
  904.             this.doAppend(var2);
  905.          } else if (var1.equals("scalar")) {
  906.             this.doScalar(var2);
  907.          } else if (var1.equals("varchar")) {
  908.             this.doVarChar(var2);
  909.          } else {
  910.             this.error(var1, 239, this.locator.getLineNumber(), this.locator.getColumnNumber());
  911.          }
  912.       } else {
  913.          this.doSequenceChoice(var1, var2);
  914.       }
  915.  
  916.    }
  917.  
  918.    public void endElement(String var1) {
  919.       if (((BufferedHandlerBase)this).isSavingXML() && !var1.equals("explain") && !var1.equals("intro")) {
  920.          super.endElement(var1);
  921.       } else {
  922.          if (var1.equals("elementtype")) {
  923.             if (!this.cmClosed) {
  924.                this.currentElemDecl.setContentModel(2);
  925.             }
  926.  
  927.             this.schema.insertDeclaration(this.currentElemDecl, (BaseDeclaration)null);
  928.             this.currentElemDecl = null;
  929.  
  930.             for(int var2 = 0; var2 < this.elemDeclAttrs.size(); ++var2) {
  931.                AttributeDeclaration var3 = (AttributeDeclaration)this.elemDeclAttrs.elementAt(var2);
  932.                this.schema.insertDeclaration(var3, (BaseDeclaration)null);
  933.             }
  934.  
  935.             this.elemDeclAttrs.removeAllElements();
  936.             this.currentAttrs.clear();
  937.             if (!this.contentModels.empty()) {
  938.                this.contentModels.removeAllElements();
  939.             }
  940.  
  941.             if (!this.cmConnectors.empty()) {
  942.                this.cmConnectors.removeAllElements();
  943.             }
  944.  
  945.             this.cmClosed = true;
  946.          } else if (var1.equals("join")) {
  947.             this.currentXS = null;
  948.          } else if (var1.equals("namespace")) {
  949.             this.currentNSDecl = null;
  950.          } else if (var1.equals("datatype")) {
  951.             if (this.currentDataTypeDecl != null) {
  952.                this.schema.insertDeclaration(this.currentDataTypeDecl, (BaseDeclaration)null);
  953.             }
  954.  
  955.             this.currentDataTypeDecl = null;
  956.             this.attrChoices.removeAllElements();
  957.          } else if (var1.equals("model")) {
  958.             this.cmClosed = true;
  959.             this.isFirstGroup = false;
  960.          } else if (!var1.equals("sequence") && !var1.equals("choice")) {
  961.             if (var1.equals("intro")) {
  962.                ((BufferedHandlerBase)this).setSaveXML(false);
  963.                String var5 = ((BufferedHandlerBase)this).getSavedXML();
  964.                if (joinSubsetName != null) {
  965.                   ExternalSubset var8 = (ExternalSubset)this.schema.getNamedDeclaration(joinSubsetName, Class.forName("com.extensibility.xml.ExternalSubset"));
  966.                   if (var8 != null) {
  967.                      ((BaseDeclaration)var8).addComment(new Comment("INTRO", var5));
  968.                   }
  969.                } else {
  970.                   Vector var9 = new Vector();
  971.                   var9.addElement(new Comment(var5));
  972.                   this.schema.setComments((URI)null, var9);
  973.                }
  974.             } else if (var1.equals("comment")) {
  975.                this.commentStart = false;
  976.                if (this.commentContent.length() > 0) {
  977.                   this.topComments.addElement(new Comment(this.commentContent.toString()));
  978.                }
  979.  
  980.                this.commentContent.setLength(0);
  981.             } else if (var1.equals("explain")) {
  982.                ((BufferedHandlerBase)this).setSaveXML(false);
  983.                String var6 = ((BufferedHandlerBase)this).getSavedXML();
  984.                if (this.inEnumeration) {
  985.                   this.lastEnumExplain = var6;
  986.                } else if (this.currentAttrDecl != null) {
  987.                   this.currentAttrDecl.addComment(new Comment("USAGE", var6));
  988.                } else if (this.currentElemDecl != null) {
  989.                   this.currentElemDecl.addComment(new Comment("USAGE", var6));
  990.                } else if (this.currentDataTypeDecl != null) {
  991.                   this.currentDataTypeDecl.addComment(new Comment("USAGE", var6));
  992.                } else if (this.currentXS != null) {
  993.                   this.currentXS.addComment(new Comment("USAGE", var6));
  994.                } else if (this.currentNSDecl != null) {
  995.                   this.currentNSDecl.addComment(new Comment("USAGE", var6));
  996.                } else {
  997.                   this.error("Cannot add explain if it doesn't belong to any element declaration", 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  998.                }
  999.  
  1000.                this.commentKind = null;
  1001.             } else if (var1.equals("attdef")) {
  1002.                this.currentAttrDecl = null;
  1003.                this.attrChoices.removeAllElements();
  1004.             } else if (var1.equals("enumeration")) {
  1005.                this.inEnumeration = false;
  1006.                Vector var7 = new Vector();
  1007.  
  1008.                for(int var10 = 0; var10 < this.attrChoices.size(); ++var10) {
  1009.                   var7.addElement(this.attrChoices.elementAt(var10));
  1010.                }
  1011.  
  1012.                if (this.currentAttrDecl != null) {
  1013.                   if (!this.optionExplains.isEmpty()) {
  1014.                      this.currentAttrDecl.setChoices(var7, this.optionExplains);
  1015.                   } else {
  1016.                      this.currentAttrDecl.setChoices(var7);
  1017.                   }
  1018.                } else if (this.currentDataTypeDecl != null) {
  1019.                   Facet var4 = new Facet(Facet.FACET_ENUM_NAME, var7);
  1020.                   if (!this.optionExplains.isEmpty()) {
  1021.                      var4.setExplains(this.optionExplains);
  1022.                   }
  1023.  
  1024.                   this.currentDataTypeDecl.applyFacet(var4);
  1025.                }
  1026.  
  1027.                this.optionExplains = new Hashtable();
  1028.             } else if (var1.equals("option")) {
  1029.                this.optionStart = false;
  1030.                if (this.optionContent.length() > 0) {
  1031.                   this.attrChoices.addElement(this.optionContent.toString());
  1032.                   if (this.lastEnumExplain != null) {
  1033.                      this.optionExplains.put(this.optionContent.toString(), this.lastEnumExplain);
  1034.                      this.lastEnumExplain = null;
  1035.                   }
  1036.                }
  1037.  
  1038.                this.optionContent.setLength(0);
  1039.             } else if (var1.equals("fixed")) {
  1040.                this.currentAttrDecl.setDefault(this.fixedContent == null ? "" : this.fixedContent);
  1041.                this.fixedStart = false;
  1042.             } else if (var1.equals("default")) {
  1043.                this.currentAttrDecl.setDefault(this.defaultContent == null ? "" : this.defaultContent);
  1044.                this.defaultStart = false;
  1045.             } else if (var1.equals("extends")) {
  1046.                this.cmClosed = true;
  1047.             } else if (var1.equals("append")) {
  1048.             }
  1049.          } else {
  1050.             if (this.cmConnectors.size() > 1) {
  1051.                this.cmConnectors.pop();
  1052.             }
  1053.  
  1054.             if (this.contentModels.size() > 1) {
  1055.                this.contentModels.pop();
  1056.             }
  1057.          }
  1058.  
  1059.       }
  1060.    }
  1061.  
  1062.    public void characters(char[] var1, int var2, int var3) throws SAXException {
  1063.       if (((BufferedHandlerBase)this).isSavingXML()) {
  1064.          super.characters(var1, var2, var3);
  1065.       } else {
  1066.          if (this.optionStart) {
  1067.             this.optionContent.append(var1, var2, var3);
  1068.          } else if (this.fixedStart) {
  1069.             this.fixedContent = String.valueOf(var1, var2, var3);
  1070.          } else if (this.defaultStart) {
  1071.             this.defaultContent = String.valueOf(var1, var2, var3);
  1072.          } else if (this.commentStart) {
  1073.             this.commentContent.append(var1, var2, var3);
  1074.          } else {
  1075.             String var4 = new String(String.valueOf(var1, var2, var3).trim());
  1076.             if (var4.length() > 0) {
  1077.                this.error(var4, 239, this.locator.getLineNumber(), this.locator.getColumnNumber());
  1078.             }
  1079.          }
  1080.  
  1081.       }
  1082.    }
  1083.  
  1084.    private DataType convertDataType(String var1) {
  1085.       String var2 = DataTypeIntf.STRING;
  1086.       if (var1 != null) {
  1087.          if (var1.equals("URI")) {
  1088.             var2 = DataTypeIntf.URI;
  1089.          } else if (var1.equals("datetime")) {
  1090.             var2 = DataTypeIntf.DATETIME;
  1091.          } else if (var1.equals("double")) {
  1092.             var2 = DataTypeIntf.R8;
  1093.          } else if (var1.equals("byte")) {
  1094.             var2 = DataTypeIntf.I1;
  1095.          } else if (var1.equals("long")) {
  1096.             var2 = DataTypeIntf.I8;
  1097.          } else if (!DataTypeFactory.isPrimitive(DataTypeFactory.createDataType(var1)) && !var1.equals(DataTypeIntf.BOOLEAN) && !var1.equals(DataTypeIntf.STRING) && !var1.equals(DataTypeIntf.URI) && !var1.equals(DataTypeIntf.NUMBER) && !var1.equals(DataTypeIntf.FLOAT) && !var1.equals(DataTypeIntf.INT) && !var1.equals(DataTypeIntf.DATE) && !var1.equals(DataTypeIntf.TIME) && !var1.equals(DataTypeIntf.DATETIME)) {
  1098.             var2 = var1;
  1099.          } else {
  1100.             var2 = var1;
  1101.          }
  1102.       }
  1103.  
  1104.       return DataTypeFactory.createDataType(var2);
  1105.    }
  1106. }
  1107.